
// import chisel3._
// import chisel3.util.Counter
// import chiseltest._
// import org.scalatest.{Matchers, FlatSpec}
// import scala.util.Random

// import comlib._

// class GroupSpec extends FlatSpec with ChiselScalatestTester with Matchers {

//     behavior of "Group"

//     val rnd = new Random

//     it should "Random Test" in {

//         class MyTest(lock:Boolean) extends Module {
//             val io = IO(new Bundle{
//                 val ins = Input(Vec(30, UInt(8.W)))
//                 val sel = Input(UInt(2.W))
//                 val key = Output(UInt())
//                 val data = Output(UInt())
//             })
            
//             val wid = chisel3.util.log2Up(io.ins.size)
//             val tbl = io.ins.zipWithIndex.map{ case (v,i)=> Comparator(v,i.U(wid.W))}.groupVec(4, Comparator(0.U(8.W), 0.U(wid.W)))
//             val (cnt, wrap) = Counter( true.B, 8 )      // 加入计数器，测试时序关系

//             val seler = tbl(cnt)(io.sel)
//             // val seler = tbl(cnt)(io.sel).asTypeOf(Comparator(0.U(8.W), 0.U(wid.W)))

//             io.key := RegNext(seler.key) // 加入输出打拍
//             io.data := RegNext(seler.data)
//         }

//         // val fillVal = rnd.nextInt(256)  // 随机补齐填充值
//         val lock = rnd.nextInt(1)

//         test( new MyTest(lock==1) ){ dut =>
            
//             var cnt = 0

//             for( testSlot <- 0 until 100 ){ // 测试100次相互耦合
//                 // 激励
//                 val ins = Seq.fill(30)(rnd.nextInt(256)) ++ Seq(0, 0)

//                 // Driver
//                 for( i <- 0 until 30 ) dut.io.ins(i).poke(ins(i).U)

//                 for( time <- 0 until (rnd.nextInt(10) + 1) ){  // 随机读取几次

//                     val sel = rnd.nextInt(4)

//                     dut.io.sel.poke(sel.U)

//                     dut.clock.step()

//                     // Checker
//                     val idx = cnt * 4 + sel
//                     dut.io.key.expect( ins(idx).U, s"idx=${idx} ins=${ins}" )
//                     dut.io.data.expect( if(idx<30) idx.U else 0.U, s"idx=${idx} ins=${ins}" )

//                     cnt = (cnt + 1) % 8
//                 }
                
//             }
            
//         }
//     }

    

// }